import uuid

from flask_sqlalchemy import SQLAlchemy

db = SQLAlchemy()

class User(db.Model):
    """ 用户模型 """
    __tablename__ = 'accounts_user'
    id = db.Column(db.Integer, primary_key=True)  # 主键
    username = db.Column(db.String(64), nullable=False)  # 用户名
    nickname = db.Column(db.String(64))  # 昵称
    password = db.Column(db.String(256))  # 密码
    is_active = db.Column(db.Boolean, default=True)  # 是否登录
    is_super = db.Column(db.Boolean, default=False)  # 是否超级用户


class Tag(db.Model):
    """ 商品标签 """
    __tablename__ = 'product_tag'
    id = db.Column(db.Integer, primary_key=True)  # 主键
    uid = db.Column(db.String(128), nullable=False, default=uuid.uuid4, unique=True)  # UID
    name = db.Column(db.String(128), nullable=False)  # 标签名称
    code = db.Column(db.String(32))  # 标签编码
    desc = db.Column(db.String(256))  # 标签描述
    is_valid = db.Column(db.Boolean, default=True)  # 逻辑删除
    reoder = db.Column(db.Integer, default=0)  # 排序
    create_at = db.Column(db.DateTime)  # 创建时间
    updated_at = db.Column(db.DateTime)  # 最后修改的时间



class Classify(db.Model):
    """ 商品分类 """
    __tablename__ = 'product_classify'
    id = db.Column(db.Integer, primary_key=True)  # 主键
    uid = db.Column(db.String(128), nullable=False, default=uuid.uuid4, unique=True)  # UID
    parent_id = db.Column(db.Integer, db.ForeignKey('product_classify.id'))  # 关联父级ID
    img = db.Column(db.String(256))  # 图片地址
    name = db.Column(db.String(128), nullable=False)  # 分类名称
    code = db.Column(db.String(32))  # 分类编码
    desc = db.Column(db.String(256))  # 分类描述
    is_valid = db.Column(db.Boolean, default=True)  # 逻辑删除
    reoder = db.Column(db.Integer, default=0)  # 排序
    create_at = db.Column(db.DateTime)  # 创建时间
    updated_at = db.Column(db.DateTime)  # 最后修改的时间

class Product(db.Model):
    """ 商品类 """
    __tablename__ = 'product'
    id = db.Column(db.Integer, primary_key=True)  # 主键
    uid = db.Column(db.String(128), nullable=False, default=uuid.uuid4, unique=True)  # UID
    name = db.Column(db.String(128), nullable=False)  # 商品标题
    content = db.Column(db.Text, nullable=False)  # 商品描述
    desc = db.Column(db.String(256), nullable=False)  # 商品描述
    types = db.Column(db.String(10), nullable=False)  # 类型
    price = db.Column(db.Integer, nullable=False)  # 价格
    origin_price = db.Column(db.Float)  # 原价
    img = db.Column(db.String(256), nullable=False)  # 主图
    channel = db.Column(db.String(32))  # 渠道
    buy_link = db.Column(db.String(256))  # 链接
    status = db.Column(db.String(10), nullable=False)  # 商品状态
    sku_count = db.Column(db.Integer, default=0)  # 库存
    remain_count = db.Column(db.Integer, default=0)  # 剩余库存
    view_count = db.Column(db.Integer, default=0)  # 浏览次数
    score = db.Column(db.Float, default=10)  # 评分

    is_valid = db.Column(db.Boolean, default=True)  # 逻辑删除
    reoder = db.Column(db.Integer, default=0)  # 排序
    create_at = db.Column(db.DateTime)  # 创建时间
    updated_at = db.Column(db.DateTime)  # 最后修改的时间

class ProductClasses(db.Model):
    """ 商品与分类的关系 """
    __tablename__ = 'product_classify_rel'

    id = db.Column(db.Integer, primary_key=True)  # 主键
    product_id = db.Column(db.Integer, db.ForeignKey('product.id'))
    cls_id = db.Column(db.Integer, db.ForeignKey('product_classify.id'))

class ProductTags(db.Model):
    """ 商品与标签的关系 """
    __tablename__ = 'product_tag_rel'

    id = db.Column(db.Integer, primary_key=True)  # 主键
    product_id = db.Column(db.Integer, db.ForeignKey('product.id'))
    cls_id = db.Column(db.Integer, db.ForeignKey('product_tag.id'))